#ifndef _config_H_
#define _config_H_

#include "windows.h"
#include "stdio.h"


#define   CodeMapSize  1024*1024*64
#define   ExeCodeLogSize  1024*1024*160
#define   GMmBlock		1024*1024*200
typedef struct
{
	ULONG32	pVideoBuffer;
	ULONG32	lPitch;
	ULONG32	dwWidth;
	ULONG32	dwHeight;
}VIDEO_INFO;

typedef struct
{
	CHAR		TargetProcName[0x10];  //16
	VIDEO_INFO	videoinfo;      	   //16
	//LPVOID     	pGMmBlock;           //4
	LPVOID     	pCodeMapMem;           //4
	LPVOID		pExeCodeLogMm;         //4
	ULONG32		LogCount;  //out       //4
	ULONG32		BaseOfProc;//out       //4
	ULONG32		g_MarkIndex; //out  	//48
	ULONG32     Eip;	//in
}InfoBlock;

typedef struct _GUEST_REGS
{
	ULONG32 rdi; //
	ULONG32 rsi; //+4
	ULONG32 rbp; //+8
	ULONG32 rsp;//+0C
	ULONG32 rbx;//+10
	ULONG32 edx;//+14
	ULONG32 rcx;//+18
	ULONG32 rax;//+1C

	//ULONG32 rax;
	//ULONG32 rcx;
	//ULONG32 edx;
	//ULONG32 rbx;
	//ULONG32 rsp;
	//ULONG32 rbp;
	//ULONG32 rsi;
	//ULONG32 rdi;

} GUEST_REGS, *PGUEST_REGS;

typedef struct	_RecordLog
{
	ULONG32	EIP;					//4
	ULONG32 reserve1;				//4
	ULONG32 reserve2;				//4
	ULONG32 reserve3;				//4
	CHAR	InstructionHex[0x10];	//0x10
	CHAR	InstructionStr[0x40];	//0x40
	GUEST_REGS	GusetRegisters;		//0x20
}RecordDetailedLog;  //0x80

extern LPVOID  LpCodeMapMem;
extern LPVOID  LpExeCodeLogMm;
extern LPVOID  TableUsedOfCode;
extern LPVOID  LpTargetProInfoMm;
extern LPVOID  LpGMmBlock;
void ConfigInit();
extern DWORD 	ShotSnap ;
#endif
